package com.sheng.leetcode.year2022.month11.day03;

import org.junit.Test;

/**
 * @author liusheng
 * @date 2022/11/03
 *<p>
 * 1668. 最大重复子字符串<p>
 *<p>
 * 给你一个字符串 sequence ，如果字符串 word 连续重复 k 次形成的字符串是 sequence 的一个子字符串，<p>
 * 那么单词 word 的 重复值为 k 。<p>
 * 单词 word 的 最大重复值 是单词 word 在 sequence 中最大的重复值。<p>
 * 如果 word 不是 sequence 的子串，那么重复值 k 为 0 。<p>
 * 给你一个字符串 sequence 和 word ，请你返回 最大重复值 k 。<p>
 *<p>
 * 示例 1：<p>
 * 输入：sequence = "ababc", word = "ab"<p>
 * 输出：2<p>
 * 解释："abab" 是 "ababc" 的子字符串。<p>
 *<p>
 * 示例 2：<p>
 * 输入：sequence = "ababc", word = "ba"<p>
 * 输出：1<p>
 * 解释："ba" 是 "ababc" 的子字符串，但 "baba" 不是 "ababc" 的子字符串。<p>
 *<p>
 * 示例 3：<p>
 * 输入：sequence = "ababc", word = "ac"<p>
 * 输出：0<p>
 * 解释："ac" 不是 "ababc" 的子字符串。<p>
 *<p>
 * 提示：<p>
 * 1 <= sequence.length <= 100<p>
 * 1 <= word.length <= 100<p>
 * sequence 和 word 都只包含小写英文字母。<p>
 */
public class LeetCode1668 {

    @Test
    public void test01() {
//        String sequence = "ababc", word = "ab";
//        String sequence = "ababc", word = "ba";
//        String sequence = "ababc", word = "ac";
        String sequence = "aaa", word = "a";
        System.out.println(new Solution().maxRepeating(sequence, word));
    }
}
class Solution {
    public int maxRepeating(String sequence, String word) {
        // 相等直接返回 1
        if (sequence.equals(word)) {
            return 1;
        }
        // 返回值
        int ans = 0;
        int length = sequence.length();
        int length1 = word.length();
        for (int i = 0; i < length; i++) {
            // 找到 sequence 中与 word 第一个字符相等的位置，然后开始遍历
            if (sequence.charAt(i) == word.charAt(0)) {
                // 当前循环的最大长度
                int max = 0;
                int j = i + 1;
                int k;
                // 判断 word 长度
                if (length1 == 1) {
                    k = 0;
                    max++;
                } else {
                    k = 1;
                }
                while (j < length && k < length1 && sequence.charAt(j) == word.charAt(k)) {
                    j++;
                    k++;
                    // 循环到了 word 单词的末尾时，重新循环
                    if (k == length1) {
                        max++;
                        k = 0;
                    }
                }
                ans = Math.max(max, ans);
            }
        }
        return ans;
    }
}
